from rest_framework import serializers
from django_redis import get_redis_connection
# 因为数据不需要入库，而且也没用关联的模型 所以用Serializer
class RegisterSmscodeSerializer(serializers.Serializer):
    """
    验证
    1.字段类型的验证
    2.字段选项的验证
    3.单个字段验证
    4.多个字段验证

    """

    text = serializers.CharField(max_length=4,min_length=4,required=True,label='图片验证码')
    image_code_id = serializers.UUIDField(label='uuid')


    # 用户的图片验证码 获取 redis 的图片验证码
    def validate(self,attrs):

        # 1.用户的图片验证码
        text = attrs.get('text')
        image_code_id = attrs.get('image_code_id')
        # 2.获取redis 的图片验证码
        # 连接redis
        redis_conn = get_redis_connection('code')

        # 获取 redis 的数据
        redis_text = redis_conn.get('img_%s'%image_code_id)
        # 时效
        if redis_text is None:
            raise serializers.ValidationError('图片验证码已过期')

        # 3.比较
        # redis 的数据是二进制 bytes类型
        # 统一大小写
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError('输入验证码不一致')


        return attrs